var row = null;
if ($('#row').length > 0) {
    var rowValue = $('#row').val();
    if (rowValue && rowValue.trim() !== '') {
        row = JSON.parse(rowValue);
    } else {
        row = null;
    }
} else {
    row = null;
}

function getConfigAdmin(key, defaultValue = 0) {
    return (Config.admin && Config.admin[key]) ? Config.admin[key] : defaultValue;
}

// 设置全局禁用自动刷新标志
$(document).ready(function () {
    // 在 body 上设置标志，禁用自动刷新
    //$('body').attr('data-disable-auto-refresh', 'true');
    // 也可以通过 Config 设置
    if (typeof Config !== 'undefined') {
        Config.disableAutoRefresh = true;
        Config.autoCloseDelay = 1500; // 自动关闭弹窗的延迟时间（毫秒）
    }

    // 拦截 location.reload 方法
    var originalReload = location.reload;
    location.reload = function (forceReload) {
        saveScrollPosition();

        // 延迟执行原始刷新，给保存滚动位置的时间
        setTimeout(function () {
            originalReload.call(location, forceReload);
        }, 50);
    };

    // 页面加载完成后恢复滚动位置
    $(window).on('load', function () {
        setTimeout(function () {
            restoreScrollPosition();
        }, 100);
    });
});

// 保存页面滚动位置
var savedScrollPosition = 0;
var scrollPositionKey = 'fastadmin_scroll_position_' + location.pathname;

// 跟踪最近的操作类型
var lastOperationType = null;

// 保存滚动位置的函数
function saveScrollPosition() {
    savedScrollPosition = $(window).scrollTop();
    sessionStorage.setItem(scrollPositionKey, savedScrollPosition);
}

// 恢复滚动位置的函数
function restoreScrollPosition() {
    var position = savedScrollPosition || sessionStorage.getItem(scrollPositionKey) || 0;
    if (position > 0) {
        $(window).scrollTop(position);
        savedScrollPosition = 0;
        sessionStorage.removeItem(scrollPositionKey);
    }
}

// 页面加载时恢复滚动位置
$(document).ready(function () {
    restoreScrollPosition();
});

// 重写 Fast.api.close 方法，完全禁用刷新回调
$(document).ready(function () {
    setTimeout(function () {
        if (typeof Fast !== 'undefined' && Fast.api && Fast.api.close) {
            Fast.api._originalClose = Fast.api.close;

            Fast.api.close = function (data) {
                var index = parent.Layer.getFrameIndex(window.name);
                // 保存滚动位置
                if (parent.saveScrollPosition) {
                    parent.saveScrollPosition();
                }

                // 只关闭弹窗，不调用任何回调
                parent.Layer.close(index);

                // 显示成功提示
                if (data && data.msg) {
                    parent.Toastr && parent.Toastr.success(data.msg);
                } else if (data) {
                    parent.Toastr && parent.Toastr.success('操作成功');
                }

                // 延迟恢复滚动位置
                setTimeout(function () {
                    if (parent.restoreScrollPosition) {
                        parent.restoreScrollPosition();
                    }
                }, 100);
            };
        }
    }, 500);
});

// 全局禁用编辑窗口保存后的自动刷新行为
$(document).on('fa.event.success', function (event, data) {
    // 检查是否是状态更新操作
    var msg = (data && data.msg) ? data.msg : '';
    var isStatusUpdate =  msg.indexOf('切换成功') > -1 ||
                        lastOperationType === 'status_update';
    
    if (isStatusUpdate) {
        // 对于状态更新操作，不阻止默认行为，允许页面刷新
        return true;
    }

    // 保存滚动位置
    saveScrollPosition();

    // 阻止默认行为
    event.preventDefault();
    event.stopPropagation();

    // 不在这里显示提示，提示由 Fast.events.onAjaxSuccess 处理
    // 这里主要负责阻止自动刷新行为
    // 延迟恢复滚动位置
    setTimeout(function () {
        restoreScrollPosition();
    }, 200);

    return false;
});

// 拦截页面刷新
$(document).ready(function () {
    var originalReload = location.reload;

    location.reload = function (forceReload) {
        saveScrollPosition();
        originalReload.call(location, forceReload);
    };
});

// 将函数暴露到全局
window.saveScrollPosition = saveScrollPosition;
window.restoreScrollPosition = restoreScrollPosition;

// 已删除重复的 fa.event.success 事件处理器，避免重复提示和页面刷新

$(document).ready(function () {
    $(document).on("dblclick click", ".dblclick", function (event) {
        event.preventDefault(); // 阻止默认行为

        const $originalElement = $(this);
        const originalWidth = $originalElement.outerWidth();
        const originalHeight = $originalElement.outerHeight();
        const originalPosition = $originalElement.offset(); // 使用 offset 获取绝对位置
        const originalValue = $originalElement.val() || $originalElement.text();
        // 创建一个新的 input 元素
        const $input = $('<input type="text" class="temp-input" />')
            .val(originalValue)
            .css({
                position: 'absolute',
                left: originalPosition.left,
                top: originalPosition.top,
                width: originalWidth,
                height: originalHeight,
                boxSizing: 'border-box',
                zIndex: 1000
            });

        // 将 input 元素添加到 body 中
        $('body').append($input);

        // 设置 input 为聚焦状态
        $input.focus();

        // let inputTimeout;
        // $input.on('input', function () {
        //     clearTimeout(inputTimeout);
        //     inputTimeout = setTimeout(function () {
        //         $input.remove();
        //         $originalElement.show();
        //         $originalElement.click();
        //     }, 3000); // 1秒
        // });

        // 监听 input 的 blur 事件，当 input 失去焦点时，隐藏 input 并恢复原元素
        $input.on('blur', function () {
            const inputValue = $input.val();
            filterOptions($originalElement, inputValue, originalValue);
            filterTableRows($originalElement, inputValue, originalValue);
            // 隐藏 input 元素
            $input.remove();
            $originalElement.text(originalValue);
            // 恢复原元素的显示
            $originalElement.show();
        });

        // 监听 input 的 keydown 事件，当按下回车键时，隐藏 input 并恢复原元素
        $input.on('keydown', function (e) {
            if (e.key === 'Enter') {
                const inputValue = $input.val();
                filterOptions($originalElement, inputValue, originalValue);
                filterTableRows($originalElement, inputValue, originalValue);
                // 隐藏 input 元素
                $input.remove();
                $originalElement.text(originalValue);
                // 恢复原元素的显示
                $originalElement.show();
            }
        });

        // 隐藏原元素
        $originalElement.hide();
    });
});

function filterOptions($originalElement, newValue, originalValue) {
    if ($originalElement.is('select')) {
        $originalElement.find('option').each(function () {
            if ($(this).text().includes(newValue)) {
                $(this).show();
                if ($(this).text().includes(newValue)) {
                    $(this).prop('selected', true);
                }
            } else {
                $(this).hide();
            }
        });

        // 如果有匹配的选项，选择第一个匹配的选项
        const $visibleOption = $originalElement.find('option:visible').first();
        if ($visibleOption.length > 0) {
            $originalElement.val($visibleOption.val());
        }
    } else if ($originalElement.is('th')) {
        if (newValue.trim() === '' || newValue.trim() === originalValue) {
            $originalElement.text(originalValue);
        } else {
            $originalElement.text(newValue);
        }
    }
}

function filterTableRows($originalElement, newValue, originalValue) {
    if ($originalElement.is('th')) {
        const columnIndex = $originalElement.index();
        const $table = $originalElement.closest('table');
        const $rows = $table.find('tr');

        // 创建一个网格来处理 rowspan
        const grid = createGrid($table);

        $rows.each(function (index) {
            if (index === 0) {
                // 保留表头行
                return;
            }

            const $cells = $(this).find('td');
            const $cell = $cells.eq(columnIndex);

            if ($cell.length > 0) {
                const cellValue = $cell.text();
                const cellRowspan = parseInt($cell.attr('rowspan')) || 1;

                if (newValue.trim() === '' || newValue.trim() === originalValue) {
                    // 如果 newValue 是空白字符串或等于 originalValue，恢复所有行
                    $(this).show();
                } else if (cellValue.includes(newValue)) {
                    $(this).show();
                } else {
                    // 检查网格中是否有匹配的单元格
                    let hasMatch = false;
                    for (let i = 0; i < cellRowspan; i++) {
                        if (grid[index + i] && grid[index + i][columnIndex] && grid[index + i][columnIndex].includes(newValue)) {
                            hasMatch = true;
                            break;
                        }
                    }
                    if (hasMatch) {
                        $(this).show();
                    } else {
                        $(this).hide();
                    }
                }
            }
        });
    }
}

function createGrid($table) {
    const grid = [];
    const $rows = $table.find('tr');

    $rows.each(function (rowIndex) {
        const $cells = $(this).find('td');
        let columnIndex = 0;

        $cells.each(function () {
            const $cell = $(this);
            const cellRowspan = parseInt($cell.attr('rowspan')) || 1;
            const cellColspan = parseInt($cell.attr('colspan')) || 1;
            const cellText = $cell.text();

            // 找到第一个空闲的列位置
            while (grid[rowIndex] && grid[rowIndex][columnIndex]) {
                columnIndex++;
            }

            // 填充网格
            for (let i = 0; i < cellRowspan; i++) {
                if (!grid[rowIndex + i]) {
                    grid[rowIndex + i] = [];
                }
                for (let j = 0; j < cellColspan; j++) {
                    grid[rowIndex + i][columnIndex + j] = cellText;
                }
            }

            columnIndex += cellColspan;
        });
    });

    return grid;
}

// 收起/展开功能
$('#toggleGuide').click(function () {
    var content = $('#guideContent');
    var icon = $(this).find('i');
    if (content.is(':visible')) {
        content.slideUp();
        icon.removeClass('fa-chevron-up').addClass('fa-chevron-down');
        $(this).html('<i class="fa fa-chevron-down"></i> 展开');
    } else {
        content.slideDown();
        icon.removeClass('fa-chevron-down').addClass('fa-chevron-up');
        $(this).html('<i class="fa fa-chevron-up"></i> 收起');
    }
});

$(document).on("change change2", "#c-cityarea_id", function (e) {
    let that = $(this);
    if (e.type == "change2") {
        url = "/cityarea/cityarea/lists";
        $.ajax({
            url: url,
            type: "GET",
            dataType: "json",
            success: function (data) {
                var $cityarea = that;
                $cityarea.empty();
                $cityarea.append('<option value="">请选择城市</option>');
                var list = data;
                $.each(list["list"], function (index, cityarea) {
                    $cityarea.append('<option value="' + cityarea.id + '">' + cityarea.name + '</option>');
                });
                if (row) {
                    that.val(row.cityarea_id);
                } else if (that.find("option").length == 2) {
                    that.find("option").each(function () {
                        var value = $(this).val();
                        if (value !== "" && value !== "0") {
                            $(this).prop("selected", true);
                            return false;
                        }
                    });
                }
            },
            error: function (xhr, status, error) {
            }
        });
    }
});


$(document).on("change change2", "#c-cityarea_id", function (e) {
    let that = $(this);
    if (e.type == "change2") {
        url = "/cityarea/cityarea/lists";
        $.ajax({
            url: url,
            type: "GET",
            dataType: "json",
            success: function (data) {
                var $cityarea = that;
                $cityarea.empty();
                $cityarea.append('<option value="">请选择城市</option>');
                var list = data;
                $.each(list["list"], function (index, cityarea) {
                    $cityarea.append('<option value="' + cityarea.id + '">' + cityarea.name + '</option>');
                });
                if (row) {
                    that.val(row.cityarea_id);
                } else if (that.find("option").length == 2) {
                    that.find("option").each(function () {
                        var value = $(this).val();
                        if (value !== "" && value !== "0") {
                            $(this).prop("selected", true);
                            return false;
                        }
                    });
                }
                if ($("#c-school_id").length > 0) {
                    $("#c-school_id").trigger("change2");
                }
            },
            error: function (xhr, status, error) {
            }
        });
    }
});


$(document).on("change change2", "#c-school_id,#c-addresslv_id_tree", function (e) {
    let that = $(this);
    if (e.type == "change2") {
        let url = "";
        if (e.target.id == "c-addresslv_id_tree") {
            url = "/school/school/lists2?XDEBUG_SESSION_START=54354";
        } else {
            url = "/school/school/lists?XDEBUG_SESSION_START=54354";
        }

        var cityId = getConfigAdmin('city_id');

        if ($("#c-cityarea_id").length > 0) {
            cityId = $("#c-cityarea_id").val();
        }
        $.ajax({
            url: url,
            data: { cityId: cityId, school_id: getConfigAdmin('school_id') },
            type: "GET",
            success: function (data) {
                var $school = that;
                $school.empty();
                $school.append('<option value="">请选择学校</option>');
                var list = JSON.parse(data);
                $.each(list["list"], function (index, school) {
                    $school.append('<option value="' + school.id + '">' + school.name + '</option>');
                });
                if ($("#c-addresslv_id").length > 0) {
                    $("#c-addresslv_id").trigger("change2");
                }
                if ($("#c-subject_lv").length > 0) {
                    $("#c-subject_lv").trigger("change2");
                }

                if (row) {
                    if (e.target.id == "c-addresslv_id_tree") {
                        that.val(row.addresslv_id);
                    } else if (e.target.id == "c-school_id") {
                        that.val(row.school_id);
                    }

                } else if (that.find("option").length == 2) {
                    that.find("option").each(function () {
                        var value = $(this).val();
                        if (value !== "" && value !== "0") {
                            $(this).prop("selected", true);
                            return false;
                        }
                    });
                }
            },
            error: function (xhr, status, error) {
            }
        });
    } else {
        if ($("#c-pid").length > 0) {
            $("#c-pid").trigger("change2");
        }
        if ($("#c-addresslv_id3").length > 0) {
            $("#c-addresslv_id3").trigger("change3");
        }
        if ($("#c-subject_lv").length > 0) {
            $("#c-subject_lv").trigger("change2");
        }
        if ($("#c-qishu").length > 0) {
            if ($("#c-addresslv_id_tree").val() == "3" || $("#c-addresslv_id_tree").val() == "23") {
                $("#c-qishu").closest(".form-group").show();
            } else {
                $("#c-qishu").closest(".form-group").hide();
            }
        }
    }


    if ($("#c-addresslv_id").length > 0) {
        $("#c-addresslv_id").trigger("change2");
    }
    if ($("#c-addresslv_id3").length > 0) {
        $("#c-addresslv_id").trigger("change3");
    }


});
$(document).on("change3", "#c-rel_type", function (e) {
    var $school = $("#c-rel_type");
    $school.empty();
    $school.append('<option value="1">学校</option>');
    $school.append('<option value="2">社区</option>');
    $school.append('<option value="3">其他机构</option>');
    $("#c-rel_type").trigger("change");
});

$(document).on("change change2", "#group", function (e) {
    var that = $("#c-rel_id");
    var selectedGroup = $(this).val();
    var selectedText = $(this).find("option:selected").text();

    // 隐藏所有相关表单组
    if ($("#c-school_id").length > 0) {
        $("#school-form-group").hide();
    }
    if ($("#c-community_id").length > 0) {
        $("#community-form-group").hide();
    }

    if (row) {
        that.val(row.group_id);
    }

    // 检查是否是学校管理员（ID=3或名称包含"学校"）
    if (selectedGroup == "3" || selectedText.indexOf("学校") !== -1) {
        $("#school-form-group").show();
        $("#community-form-group").hide();
        // 触发学校下拉框数据加载
        if ($("#c-school_id").length > 0) {
            $("#c-school_id").trigger("change2");
        }
    }
    // 检查是否是社区管理员（ID=8或名称包含"社区"）
    else if (selectedGroup == "8" || selectedText.indexOf("社区") !== -1) {
        $("#school-form-group").hide();
        $("#community-form-group").show();
        // 触发教学点下拉框数据加载
        if ($("#c-ocation_id").length > 0) {
            $("#c-ocation_id").trigger("change2");
        }
    } else {
        $("#school-form-group").hide();
        $("#community-form-group").hide();
    }

});

if ($('#c-school_id').length > 0) {
    $("#c-school_id").trigger("change2");
}

if ($('#c-ocation_pid').length > 0) {
    $('#c-ocation_pid').trigger("change2");
}

if ($('#c-receiver_id').length > 0) {
    $('#c-receiver_id').trigger("change2");
}

if ($('#c-cityarea_id').length > 0) {
    $('#c-cityarea_id').trigger("change2");
}

// ========== 通用的城市和学校过滤功能 ==========
// 适用于所有包含城市和学校下拉框的页面

// 城市选择变化时刷新表格
$(document).on('change', '#c-cityarea_id', function () {
    if ($('#table').length > 0) {
        setTimeout(function () {
            refreshTableWithCitySchool();
        }, 100);
    }
});

// 学校选择变化时刷新表格
$(document).on('change', '#c-school_id', function () {
    if ($('#table').length > 0) {
        refreshTableWithCitySchool();
    }
});

// 筛选按钮点击事件
$(document).on('click', '#btn-filter', function (e) {
    if ($('#c-cityarea_id').length > 0 || $('#c-school_id').length > 0) {
        e.preventDefault();
        refreshTableWithCitySchool();
        return false;
    }
});

// 刷新按钮点击事件
$(document).on('click', '.btn-refresh', function (e) {
    if ($('#c-cityarea_id').length > 0 || $('#c-school_id').length > 0) {
        e.preventDefault();
        refreshTableWithCitySchool();
        return false;
    }
});

// 统一的表格刷新方法
function refreshTableWithCitySchool() {
    var cityId = $('#c-cityarea_id').val();
    var schoolId = $('#c-school_id').val();
    // 构建查询参数
    var queryParams = {};
    if (cityId) {
        queryParams.city_id = cityId;
    }
    if (schoolId) {
        queryParams.school_id = schoolId;
    }
    // 刷新表格并传递参数
    if ($('#table').length > 0) {
        $('#table').bootstrapTable('refresh', {
            query: queryParams
        });
    }
}

// 初始化城市和学校过滤功能
function initCitySchoolFilter() {
    // 重写 Table.api.queryParams 以包含城市和学校参数
    if (typeof Table !== 'undefined' && Table.api) {
        // 保存原始函数（只保存一次）
        if (!Table.api._originalQueryParams) {
            Table.api._originalQueryParams = Table.api.queryParams || function (params) { return params; };
        }

        // 重写查询参数函数
        Table.api.queryParams = function (params) {
            var newParams = Table.api._originalQueryParams(params);

            // 添加城市和学校参数
            var cityId = $('#c-cityarea_id').val();
            var schoolId = $('#c-school_id').val();

            if (cityId) {
                newParams.city_id = cityId;
            }
            if (schoolId) {
                newParams.school_id = schoolId;
            }
            return newParams;
        };
    }
}

// 页面加载时初始化
$(document).ready(function () {
    // 延迟初始化，确保Table对象已经加载
    setTimeout(function () {
        if ($('#c-cityarea_id').length > 0 || $('#c-school_id').length > 0) {
            initCitySchoolFilter();
        }
    }, 500);

    // 初始化城市下拉框（如果还没有数据）
    if ($('#c-cityarea_id').length > 0 && $('#c-cityarea_id option').length <= 1) {
        $('#c-cityarea_id').trigger('change2');
    }
});